[프로그래머스] 타겟넘버 - JS

내 풀이 (성공)

DFS 연습했던게 소용이 있어서 기쁘다.
다만 if 분기를 더 깔끔하게 하도록 신경써야겠다.

고칠부분

L이 numbers.length에 도달하는지 먼저 체크하고 도달하기 전에는 계산식을 수행한다. rec(L+1, acc-numbers[L])
도달했다면 else로 빠져서 target과 같은지 체크하고 cnt++을 한다.

그리고 굳이 마지막 target값과 같을 때도 +-를 체크하는게 아니라, 한바퀴 더 돌려서 바로 === target으로 하는게 좋겠다.

let numbers = [1, 1, 1, 1, 1]
let target = 3

function solution(numbers, target) {
  let cnt = 0

  const rec = (L, acc) => {
    if (L === numbers.length - 1) {
      if (acc + numbers[L] === target || acc - numbers[L] === target) {
        return cnt++
      }
      return
    }
    rec(L + 1, acc - numbers[L])
    rec(L + 1, acc + numbers[L])
  }
  rec(0, 0)
  return cnt
}

solution(numbers, target)

리팩토링

function solution(numbers, target) {
  let cnt = 0

  const rec = (L, acc) => {
    if (L < numbers.length) {
      rec(L + 1, acc - numbers[L])
      rec(L + 1, acc + numbers[L])
    } else {
      if (acc === target) return cnt++
    }
  }
  rec(0, 0)
  return cnt
}

Written by@Jiyon Lee
뜨거운 코드를 가르며

GitHub